<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>Apache处理器的使用 － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body id="manual-page">
<div id="page-header"><p class="menu"><a href="mod/index.html">模块索引</a> | <a href="mod/directives.html">指令索引</a> | <a href="faq/index.html">常见问题</a> | <a href="glossary.html">词汇表</a> | <a href="sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="index.html">版本2.2</a></div>

<div id="translation-info">　　 <a href="translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../index.html">金步国</a>(<a href="../../index.html">作品集</a>) | 本页最后更新：2008年8月11日</div>
<div id="page-content"><div id="preamble"><h1>Apache处理器的使用</h1>


    <p>本文阐述Apache处理器的使用。</p>
  </div>
	<div class="top"><a href="handler.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="definition" id="definition">什么是处理器(Handler)</a></h2>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="related">
<tr><th>相关模块</th><th>相关指令</th></tr>
<tr><td><ul><li><code class="module"><a href="mod/mod_actions.html">mod_actions</a></code></li><li><code class="module"><a href="mod/mod_asis.html">mod_asis</a></code></li><li><code class="module"><a href="mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="mod/mod_imagemap.html">mod_imagemap</a></code></li><li><code class="module"><a href="mod/mod_info.html">mod_info</a></code></li><li><code class="module"><a href="mod/mod_mime.html">mod_mime</a></code></li><li><code class="module"><a href="mod/mod_negotiation.html">mod_negotiation</a></code></li><li><code class="module"><a href="mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="mod/mod_actions.html#action">Action</a></code></li><li><code class="directive"><a href="mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="mod/mod_mime.html#removehandler">RemoveHandler</a></code></li><li><code class="directive"><a href="mod/core.html#sethandler">SetHandler</a></code></li></ul></td></tr>
</table>


    <p>"处理器"是当一个文件被调用时，Apache所执行操作的内部表现。文件一般都有基于其文件类型的隐含处理器。通常，文件都只是被服务器简单的提交，只有某些文件类型会被特别地"处理"。</p>

    <p>处理器可以基于文件名后缀或位置进行指定，而不只是文件类型，其优越性不仅在于它是一个优秀的方案，还在于它允许一个文件同时与一种类型<strong>和</strong>一个处理器相关联。(参见：<a href="mod/mod_mime.html#multipleext">带多扩展名的文件</a>)</p>

    <p>处理器可以被编译进服务器也可以包含在模块中，还可以用<code class="directive"><a href="mod/mod_actions.html#action">Action</a></code>指令增加。标准发行版中内建的处理器如下：</p>

    <ul>
      <li><strong>default-handler</strong>：使用<code>default_handler()</code>发送文件，这是处理静态内容的默认处理器。(<code class="module"><a href="mod/core.html">core</a></code>)</li>

      <li><strong>send-as-is</strong>：按原样带HTTP头发送文件。(<code class="module"><a href="mod/mod_asis.html">mod_asis</a></code>)</li>

      <li><strong>cgi-script</strong>：将文件视为CGI脚本。(<code class="module"><a href="mod/mod_cgi.html">mod_cgi</a></code>)</li>

      <li><strong>imap-file</strong>：将文件作为映射表规则文件解析。(<code class="module"><a href="mod/mod_imagemap.html">mod_imagemap</a></code>)</li>

      <li><strong>server-info</strong>：获取服务器的配置信息。(<code class="module"><a href="mod/mod_info.html">mod_info</a></code>)</li>

      <li><strong>server-status</strong>：获取服务器状态的报告。(<code class="module"><a href="mod/mod_status.html">mod_status</a></code>)</li>

      <li><strong>type-map</strong>：将文件作为类型表文件解析以实现内容协商。(<code class="module"><a href="mod/mod_negotiation.html">mod_negotiation</a></code>)</li>
    </ul>
  </div><div class="top"><a href="handler.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="examples" id="examples">例子</a></h2>


    <h3><a name="example1" id="example1">用CGI脚本修改静态的内容</a></h3>


      <p>以下指令，将使对带有<code>html</code>后缀的文件的请求，调用CGI脚本<code>footer.pl</code></p>

      <div class="example"><p><code>
        Action add-footer /cgi-bin/footer.pl<br />
        AddHandler add-footer .html
      </code></p></div>

      <p>然后，由CGI脚本负责发送(由环境变量<code>PATH_TRANSLATED</code>指向的)原始请求文档，并按需要进行修改或增加。</p>


    <h3><a name="example2" id="example2">带HTTP头的文件</a></h3>


      <p>以下指令启用<code>send-as-is</code>处理器，它用于处理本身包含HTTP头的文件，这样，所有位于<code>/web/htdocs/asis/</code>目录中的文件，无论其后缀名是什么，都由<code>send-as-is</code>进行处理。</p>

      <div class="example"><p><code>
        &lt;Directory /web/htdocs/asis&gt;<br />
        SetHandler send-as-is<br />
        &lt;/Directory&gt;
      </code></p></div>


  </div><div class="top"><a href="handler.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="programmer" id="programmer">程序员注意事项</a></h2>


    <p>为了实现处理器功能，<a href="developer/API.html">Apache API</a>里面增加了一些内容，你可能会用到。尤其是<a href="developer/API.html">Apache API</a>结构中增加了一个字段：</p>

    <div class="example"><p><code>
      char *handler
    </code></p></div>

    <p>如果你的模块需要使用处理器，只须在对请求执行<code>invoke_handler</code>之前，设置<code>r-&gt;handler</code>为该处理器的名称即可。处理器的实现和以前一样，只是使用了处理器名称而不是内容类型。处理器的名称可以有"-"，但不能有"/"，以避免和介质类型名称冲突。</p>
  </div></div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="mod/index.html">模块索引</a> | <a href="mod/directives.html">指令索引</a> | <a href="faq/index.html">常见问题</a> | <a href="glossary.html">词汇表</a> | <a href="sitemap.html">站点导航</a></p></div>
</body></html>
